package com.itg.vms.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.itg.vms.dao.SysMenuDao;
import com.itg.vms.dao.impl.SysMenuDaoImpl;
import com.itg.vms.entity.SysMenu;
import com.itg.vms.entity.SystemMenu;
import com.itg.vms.entity.vo.MenuVo;
import com.itg.vms.service.SysMenuService;
import com.itg.vms.util.TreeUtil;

import java.util.*;

/**
 * @author zjzaki
 * @create 2023年03月07日 01:50:29
 */
public class SysMenuServiceImpl implements SysMenuService {

    /**
     * 系统菜单数据层
     */
    private SysMenuDao sysMenuDao = new SysMenuDaoImpl();

    @Override
    public JSONObject menu() {
        //Map<String, Object> map = new HashMap<>(16);
        JSONObject jsonObject = new JSONObject(true);
        Map<String, Object> home = new LinkedHashMap<>(16);
        Map<String, Object> logo = new LinkedHashMap<>(16);
        List<SysMenu> menuList = sysMenuDao.findAllByStatusOrderBySort(true);

        List<MenuVo> menuInfo = new ArrayList<>();
        for (SysMenu e : menuList) {

            MenuVo menuVO = new MenuVo();
            menuVO.setId(e.getKey().getId());
            menuVO.setPid(e.getPid());
            menuVO.setHref(e.getKey().getHref());
            menuVO.setTitle(e.getKey().getTitle());
            menuVO.setIcon(e.getIcon());
            menuVO.setTarget(e.getTarget());
            menuInfo.add(menuVO);
        }

        home.put("title", "首页");
        //控制器路由,自行定义
        home.put("href", "/admin/page/welcome-1.html");
        logo.put("title", "后台管理系统");
        //静态资源文件路径,可使用默认的logo.png
        logo.put("image", "/admin/view/images/logo.png");
        logo.put("href", "");
        jsonObject.put("homeInfo", home);
        jsonObject.put("logoInfo", logo);
        jsonObject.put("menuInfo", TreeUtil.toTree(menuInfo, 0L));

        return jsonObject;
    }

    /**
     * 得到菜单列表
     *
     * @return List<SystemMenu>
     */
    @Override
    public List<SystemMenu> getMenuList() {
        List<SystemMenu> menuList = sysMenuDao.getSystemMenuByStatusAndSort();
        return menuList;
    }

    /**
     * 根据菜单id更新踩点状态
     *
     * @param id     要更新的菜单id
     * @param status 菜单状态
     * @return 影响的行数
     */
    @Override
    public int updateMenuStatus(Integer id, Integer status) {
        return sysMenuDao.updateMenuStatus(id, status);
    }
}